#pragma once 
#include <memory>
#include "Builder.h"
/* A Concrete Class with the ability to edit documents 
    - using functions from class 'Builder'
*/
class Director
{
public:
    Director(std::shared_ptr<Builder> b)
    {
        builder = b;
    }
    // edit the documents
    void construct();
    
private:
    // save the pointer that points to derived class of 'Builder'
    std::shared_ptr<Builder> builder;
};